using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows.Forms;

namespace HotkeysPlugin
{
    [Serializable]
    public class Preferences
    {
#region Fields
        #region Toolbar buttons
        private Keys tbGrid;
        private Keys tbOcclusionGrid;
        private Keys tbSurfaceMesh;
        private Keys tbBaked;
        private Keys tbWireframe;
        private Keys tbSkeletons;
        private Keys tbShadows;
        private Keys tbWater;
        private Keys tbNormalMaps;
        private Keys tbFrameRate;
        private Keys tbBloom;
        private Keys tbFarPlane;
        private Keys tbFog;
        private Keys tbSky;
        private Keys tbMusic;
        private Keys tbSnap;
        private Keys tbSelectObjects;
        private Keys tbPaintObjects;
        private Keys tbSelectTerrain;
        private Keys tbPaintTerrain;
        private Keys tbTiles;
        private Keys tbSetStartLocation;
        private Keys tbPaintSpawnPoint;
        private Keys tbCreateTransition;
        private Keys tbDragSelection;
        #endregion

        #region Day/Night stages
        private Keys dnSunrise;
        private Keys dnDaytime;
        private Keys dnSunset;
        private Keys dnMoonrise;
        private Keys dnNighttime;
        private Keys dnMoonset;
        private Keys dnTransition;
        private Keys dnDefault;
        private Keys dnRun;
        private Keys dnNormalSpeed;
        #endregion

        #region Show/hide filters
        private Keys showhideShowAll;
        private Keys showhideHideAll;
        private Keys showhideCreatures;
        private Keys showhideDoors;
        private Keys showhideEncounters;
        private Keys showhideItems;
        private Keys showhidePlaceables;
        private Keys showhideSounds;
        private Keys showhideStaticCameras;
        private Keys showhideStores;
        private Keys showhideTriggers;
        private Keys showhideWaypoints;
        private Keys showhideTrees;
        private Keys showhideEnvironmentObjects;
        private Keys showhideLights;
        private Keys showhidePlacedEffects;
        private Keys showhidePlacedEffectHelpers;
        private Keys showhideHookPoints;
        private Keys showhideLightSpheres;
       #endregion

       #region Selection filers
        private Keys selectionAll;
        private Keys selectionNone; 
        private Keys selectionCreatures;
        private Keys selectionDoors;
        private Keys selectionEncounters;
        private Keys selectionItems;
        private Keys selectionPlaceables;
        private Keys selectionSounds;
        private Keys selectionStaticCameras;
        private Keys selectionStores;
        private Keys selectionTriggers;
        private Keys selectionWaypoints;
        private Keys selectionTrees;
        private Keys selectionPlacedEffects;
        private Keys selectionEnvironmentObjects;
        private Keys selectionLights;
       #endregion
#endregion Fields

        #region Toolbar 1
        [DefaultValue(Keys.None), Browsable (true), Category ("Toolbar 1"), DisplayName ("01. Grid"), Description ("")]
        public Keys TbGrid {
            get { return tbGrid; }
            set { tbGrid = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("02. Occlusion grid"), Description ("")]
        public Keys TbOcclusionGrid {
            get { return tbOcclusionGrid; }
            set { tbOcclusionGrid = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("03. Occlusion grid"), Description ("")]
        public Keys TbSurfaceMesh {
            get { return tbSurfaceMesh; }
            set { tbSurfaceMesh = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("04. Baked"), Description ("")]
        public Keys TbBaked {
            get { return tbBaked; }
            set { tbBaked = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("05. Wireframe"), Description ("")]
        public Keys TbWireframe {
            get { return tbWireframe; }
            set { tbWireframe = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("06. Skeletons"), Description ("")]
        public Keys TbSkeletons {
            get { return tbSkeletons; }
            set { tbSkeletons = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("07. Shadows"), Description ("")]
        public Keys TbShadows {
            get { return tbShadows; }
            set { tbShadows = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("08. Water"), Description ("")]
        public Keys TbWater {
            get { return tbWater; }
            set { tbWater = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("09. Normal Mapped Terrain"), Description ("")]
        public Keys TbNormalMaps {
            get { return tbNormalMaps; }
            set { tbNormalMaps = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("10. Frame Rate"), Description ("")]
        public Keys TbFrameRate {
            get { return tbFrameRate; }
            set { tbFrameRate = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("11. Bloom"), Description ("")]
        public Keys TbBloom {
            get { return tbBloom; }
            set { tbBloom = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("12. Use Area Far Plane"), Description ("")]
        public Keys TbFarPlane {
            get { return tbFarPlane; }
            set { tbFarPlane = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("13. Fog"), Description ("")]
        public Keys TbFog {
            get { return tbFog; }
            set { tbFog = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("14. Sky"), Description ("")]
        public Keys TbSky {
            get { return tbSky; }
            set { tbSky = value; }
        }
        [Browsable (true), Category ("Toolbar 1"), DisplayName ("15. Music"), Description ("")]
        public Keys TbMusic {
            get { return tbMusic; }
            set { tbMusic = value; }
        } 
	    #endregion

        #region Toolbar 2
		[Browsable (true), Category ("Toolbar 2"), DisplayName ("01. Snap"), Description ("")]
        public Keys TbSnap {
            get { return tbSnap; }
            set { tbSnap = value; }
        }
        [Browsable (true), Category ("Toolbar 2"), DisplayName ("02. Select Objects"), Description ("")]
        public Keys TbSelectObjects {
            get { return tbSelectObjects; }
            set { tbSelectObjects = value; }
        }
        [Browsable (true), Category ("Toolbar 2"), DisplayName ("03. Paint Objects"), Description ("")]
        public Keys TbPaintObjects {
            get { return tbPaintObjects; }
            set { tbPaintObjects = value; }
        }
        [Browsable (true), Category ("Toolbar 2"), DisplayName ("04. Select Terrain"), Description ("")]
        public Keys TbSelectTerrain {
            get { return tbSelectTerrain; }
            set { tbSelectTerrain = value; }
        }
        [Browsable (true), Category ("Toolbar 2"), DisplayName ("05. Paint Terrain"), Description ("")]
        public Keys TbPaintTerrain {
            get { return tbPaintTerrain; }
            set { tbPaintTerrain = value; }
        }
        [Browsable (true), Category ("Toolbar 2"), DisplayName ("06. Tiles"), Description ("")]
        public Keys TbTiles {
            get { return tbTiles; }
            set { tbTiles = value; }
        }
        [Browsable (true), Category ("Toolbar 2"), DisplayName ("07. Set Start Location"), Description ("")]
        public Keys TbSetStartLocation {
            get { return tbSetStartLocation; }
            set { tbSetStartLocation = value; }
        }
        [Browsable (true), Category ("Toolbar 2"), DisplayName ("08. Paint Spawn Point"), Description ("")]
        public Keys TbPaintSpawnPoint {
            get { return tbPaintSpawnPoint; }
            set { tbPaintSpawnPoint = value; }
        }
        [Browsable (true), Category ("Toolbar 2"), DisplayName ("09. Create Transition"), Description ("")]
        public Keys TbCreateTransition {
            get { return tbCreateTransition; }
            set { tbCreateTransition = value; }
        }
        [Browsable (true), Category ("Toolbar 2"), DisplayName ("10. Drag Selection on/off"), Description ("")]
        public Keys TbDragSelection {
            get { return tbDragSelection; }
            set { tbDragSelection = value; }
        } 
	    #endregion

        #region Day/Night stages
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("01. Sunrise"), Description ("")]
        public Keys DNSunrise {
            get { return dnSunrise; }
            set { dnSunrise = value; }
        }
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("02. Daytime"), Description ("")]
        public Keys DNDaytime {
            get { return dnDaytime; }
            set { dnDaytime = value; }
        }
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("03. Sunset"), Description ("")]
        public Keys DNSunset {
            get { return dnSunset; }
            set { dnSunset = value; }
        }
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("04. Moonrise"), Description ("")]
        public Keys DNMoonrise {
            get { return dnMoonrise; }
            set { dnMoonrise = value; }
        }
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("05. Nighttime"), Description ("")]
        public Keys DNNighttime {
            get { return dnNighttime; }
            set { dnNighttime = value; }
        }
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("06. Moonset"), Description ("")]
        public Keys DNMoonset {
            get { return dnMoonset; }
            set { dnMoonset = value; }
        }
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("07. Transition"), Description ("")]
        public Keys DNTransition {
            get { return dnTransition; }
            set { dnTransition = value; }
        }
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("08. Default"), Description ("")]
        public Keys DNDefault {
            get { return dnDefault; }
            set { dnDefault = value; }
        }
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("09. Run"), Description ("")]
        public Keys DNRun {
            get { return dnRun; }
            set { dnRun = value; }
        }
        [Browsable (true), Category ("Day/Night stage"), DisplayName ("10. Normal/Fast Speed toggle"), Description ("")]
        public Keys DNNormalFastSpeedToggle {
            get { return dnNormalSpeed; }
            set { dnNormalSpeed = value; }
        }
        #endregion Day/Night stages

        #region Show/Hide filters
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("01. Show All"), Description ("")]
        public Keys Showhide01ShowAll {
            get { return showhideShowAll; }
            set { showhideShowAll = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("02. Hide All"), Description ("")]
        public Keys Showhide02HideAll {
            get { return showhideHideAll; }
            set { showhideHideAll = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("03. Creatures"), Description ("")]
        public Keys Showhide03Creatures {
            get { return showhideCreatures; }
            set { showhideCreatures = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("04. Doors"), Description ("")]
        public Keys Showhide04Doors {
            get { return showhideDoors; }
            set { showhideDoors = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("05. Encounters"), Description ("")]
        public Keys Showhide05Encounters {
            get { return showhideEncounters; }
            set { showhideEncounters = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("06. Items"), Description ("")]
        public Keys Showhide06Items {
            get { return showhideItems; }
            set { showhideItems = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("07. Placeables"), Description ("")]
        public Keys Showhide07Placeables {
            get { return showhidePlaceables; }
            set { showhidePlaceables = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("08. Sounds"), Description ("")]
        public Keys Showhide08Sounds {
            get { return showhideSounds; }
            set { showhideSounds = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("09. Static Cameras"), Description ("")]
        public Keys Showhide09StaticCameras {
            get { return showhideStaticCameras; }
            set { showhideStaticCameras = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("10. Stores"), Description ("")]
        public Keys Showhide10Stores {
            get { return showhideStores; }
            set { showhideStores = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("11. Triggers"), Description ("")]
        public Keys Showhide11Triggers {
            get { return showhideTriggers; }
            set { showhideTriggers = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("12. Waypoints"), Description ("")]
        public Keys Showhide12Waypoints {
            get { return showhideWaypoints; }
            set { showhideWaypoints = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("13. Trees"), Description ("")]
        public Keys Showhide13Trees {
            get { return showhideTrees; }
            set { showhideTrees = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("14. Environment Objects"), Description ("")]
        public Keys Showhide14EnvironmentObjects {
            get { return showhideEnvironmentObjects; }
            set { showhideEnvironmentObjects = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("15. Lights"), Description ("")]
        public Keys Showhide15Lights {
            get { return showhideLights; }
            set { showhideLights = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("16. Placed Effects"), Description ("")]
        public Keys Showhide16PlacedEffects {
            get { return showhidePlacedEffects; }
            set { showhidePlacedEffects = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("17. Placed Effect Helpers"), Description ("")]
        public Keys Showhide17PlacedEffectHelpers {
            get { return showhidePlacedEffectHelpers; }
            set { showhidePlacedEffectHelpers = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("18. Hook Points"), Description ("")]
        public Keys Showhide18HookPoints {
            get { return showhideHookPoints; }
            set { showhideHookPoints = value; }
        }
        [Browsable (true), Category ("Show/Hide filters"), DisplayName ("19. Light Spheres"), Description ("")]
        public Keys Showhide19LightSpheres {
            get { return showhideLightSpheres; }
            set { showhideLightSpheres = value; }
        }
        #endregion  Show/Hide filters

        #region Selection filters
        [Browsable (true), Category ("Selection filters"), DisplayName ("01. All Selectable"), Description ("")]
        public Keys Selection01All {
            get { return selectionAll; }
            set { selectionAll = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("02. None Selectable"), Description ("")]
        public Keys Selection02None {
            get { return selectionNone; }
            set { selectionNone = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("03. Creatures"), Description ("")]
        public Keys Selection03Creatures {
            get { return selectionCreatures; }
            set { selectionCreatures = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("04. Doors"), Description ("")]
        public Keys Selection04Doors {
            get { return selectionDoors; }
            set { selectionDoors = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("05. Encounters"), Description ("")]
        public Keys Selection05Encounters {
            get { return selectionEncounters; }
            set { selectionEncounters = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("06. Items"), Description ("")]
        public Keys Selection06Items {
            get { return selectionItems; }
            set { selectionItems = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("07. Placeables"), Description ("")]
        public Keys Selection07Placeables {
            get { return selectionPlaceables; }
            set { selectionPlaceables = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("08. Sounds"), Description ("")]
        public Keys Selection08Sounds {
            get { return selectionSounds; }
            set { selectionSounds = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("09. Static Cameras"), Description ("")]
        public Keys Selection09StaticCameras {
            get { return selectionStaticCameras; }
            set { selectionStaticCameras = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("10. Stores"), Description ("")]
        public Keys Selection10Stores {
            get { return selectionStores; }
            set { selectionStores = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("11. Triggers"), Description ("")]
        public Keys Selection11Triggers {
            get { return selectionTriggers; }
            set { selectionTriggers = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("12. Waypoints"), Description ("")]
        public Keys Selection12Waypoints {
            get { return selectionWaypoints; }
            set { selectionWaypoints = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("13. Trees"), Description ("")]
        public Keys Selection13Trees {
            get { return selectionTrees; }
            set { selectionTrees = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("16. Placed Effects"), Description ("")]
        public Keys Selection14PlacedEffects {
            get { return selectionPlacedEffects; }
            set { selectionPlacedEffects = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("14. Environment Objects"), Description ("")]
        public Keys Selection15EnvironmentObjects {
            get { return selectionEnvironmentObjects; }
            set { selectionEnvironmentObjects = value; }
        }
        [Browsable (true), Category ("Selection filters"), DisplayName ("15. Lights"), Description ("")]
        public Keys Selection16Lights {
            get { return selectionLights; }
            set { selectionLights = value; }
        }
        #endregion  Selection filters
           
    }
}
